package com.um.springcloud.dubbo.cluster;

import com.um.springcloud.dubbo.cluster.persistence.NonePersistence;
import org.apache.dubbo.common.utils.NetUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

/**
 * @author 甘天伟
 * @since 2024/1/24
 * 版权所有 广州优匠科技有限公司
 */
@Component
public class DeviceClusterUtil {

    @Autowired
    DeviceClusterPersistence persistence;

    /**
     * 获取设备的服务端点
     *
     * @param key 设备码
     * @return 服务端点
     */
    public String getDeviceEndpoint(String key) {
        return persistence.getDeviceEndpoint(key);
    }

    /**
     * 设置设备的服务端点
     *
     * @param key      设备码
     * @param endpoint 服务端点
     */
    public void setDeviceEndpoint(String key, String endpoint) {
        persistence.setDeviceEndpoint(key, endpoint);
    }

    /**
     * 设置设备的服务端点为当前实例
     *
     * @param key 设备码
     */
    public void setDeviceEndpoint(String key) {
        persistence.setDeviceEndpoint(key, NetUtils.getLocalHost());
    }

    /**
     * 设备是否在当前实例
     *
     * @param key 设备码
     * @return 是否在当前实例
     */
    public boolean isDeviceInCurrentEndpoint(String key) {
        if (persistence instanceof NonePersistence) {
            return true;
        }
        return NetUtils.getLocalHost().equals(getDeviceEndpoint(key));
    }
}
